ML17 - "Hello World" Notes

Contents

  1. 1. 前言
  2. 2. Hello world of deep learning
    1. 2.1. Step 1: define a set of function
    2. 2.2. Step 2: goodness of function
    3. 2.3. Step 3: pick the best function
    4. 2.4. Use Model

前言

課程網址 http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html
之前 Keras 的部分沒看到影片(Machine Learning - L9 Notes),後來看到在 2017 課程的有。

Hello world of deep learning

主要介紹 Keras ,而這邊例子用的資料是 手寫辨識,每筆資料是 28x28 的 Matrix。

8-5

Step 1: define a set of function

8-6

  • 來疊一個 Network:

    model = Sequential()

  • 有兩個 hidden layer ,每個 layer 有 500 個 neuron:

    • 第一層,fully connection 的 layer (使用 Dense )。
      input 為一張 image 28x28,output 給 500 個 neuron。
      接著設定 Activation function ,這邊選用 sigmoid。

      model.add( Dense( input_dim=28*28, output_dim=500 ) )
      model.add( Activation( "sigmoid" ) )

    • 第二層,因為這邊的 input 就是上一層的 output ,它會自己推算,不用再做定義,只需要設定 output。

      model.add( Dense( output_dim=500 ) )
      model.add( Activation( "sigmoid" ) )

  • 最後 output 是要做數字分類(0~9) ,所以是 10 維的 vector。
    這邊我們把 output layer 當作 Multiclass classification ,所以 Activation function 的部分使用 softmax。

    model.add( Dense( output_dim=10 ) )
    model.add( Activation( "softmax" ) )

這樣就完成了 model 的搭建。

Step 2: goodness of function

8-7

接著要來判斷一個 function 的好壞,所以要定義 loss function,這邊使用 cross entropy。

loss="categorical_crossentropy"

Step 3: pick the best function

8-8

我們還需要一些設定,來告訴它要怎麼訓練。

  • 用甚麼樣的方式來找最好的 function (決定好怎麼做 Gradient descent):

    optimizer="adam"

  • 參數 metrics :
    A metric is a function that is used to judge the performance of your model.
    A metric function is similar to an loss function, except that the results from evaluating a metric are not used when training the model.(這邊是從官網查到的)

    metrics=["accuracy"]

  • compile 我們的 model:

    model.compile( loss="categorical_crossentropy",
                   optimizer="adam", 
                   metrics=["accuracy"] )
    
  • 開始訓練:

    8-9

    x_train: image(28x28),
    一個二維的 numpy array :
    分別的 size 是: (有幾筆 example) 、 (784=28x28 ,表一張圖的全部 pixels)。

    y_train: image 對應的 labels (0~9),
    一個二維的 numpy array :
    分別的 size 是: (有幾筆 example) 、 (10 ,labels 0~9)。
    對應的那格為 1 ,其餘是零(one-hot)

    model.fit( x_train, y_train, 
               batch_size=100,
               nb_epoch=20 )
    

接著就是之前有過的內容了:
Machine Learning - L9 Notes

Use Model

8-15

  • Save and Load:
    https://keras.io/getting-started/faq/#how-can-i-save-a-keras-model

  • Evaluate:
    如果有 testing data 並且知道它的答案,keras 就能算出它的正確率。

    score = model.evaluate(x_test, y_test)
    print("Total loss on Testing Set:", score[0])
    print("Accuracy of Testing Set:",score[1])
    
  • Predict:
    資料只有輸入,沒有答案,輸出預測的結果。

    result = model.predict(x_test)